package com.chen.blue.service.business;

import com.chen.blue.domain.delete.business.ContestApplyRecordDelete;
import com.chen.blue.domain.dto.business.ContestApplyRecordDto;
import com.chen.blue.domain.dto.business.update.ContestApplyRecordDtoEdit;
import com.chen.blue.domain.model.business.ContestApplyRecordModel;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chen.blue.domain.query.business.ContestApplyRecordQuery;
import com.chen.blue.domain.vo.business.ContestApplyRecordVo;
import com.chen.blue.exception.e.DtoNullException;
import com.chen.blue.result.DataResult;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 竞赛申请活动记录表 服务类
 * </p>
 *
 * @author CLT
 * @since 2024-05-23
 */
public interface IContestApplyRecordService extends IService<ContestApplyRecordModel> {

    /**
     * 添加竞赛申请
     *
     * @param contestApplyRecordDto
     * @return
     * @throws DtoNullException
     */
    boolean addContestApplyRecord(ContestApplyRecordDto contestApplyRecordDto) throws DtoNullException;

    /**
     * 删除竞赛申请
     *
     * @param contestApplyRecordDelete
     * @return
     * @throws DtoNullException
     */
    boolean deleteContestApplyRecord(ContestApplyRecordDelete contestApplyRecordDelete) throws DtoNullException;

    /**
     * 更新竞赛申请
     *
     * @param contestApplyRecordDtoEdit
     * @return
     * @throws DtoNullException
     */
    boolean updateContestApplyRecordById(ContestApplyRecordDtoEdit contestApplyRecordDtoEdit) throws DtoNullException;

    /**
     * 条件查询竞赛申请
     *
     * @param contestApplyRecordQuery
     * @return
     * @throws DtoNullException
     */
    DataResult<List<ContestApplyRecordVo>> queryContestApplyRecord(ContestApplyRecordQuery contestApplyRecordQuery) throws DtoNullException;

    /**
     * 根据ID查询竞赛申请
     *
     * @param relationId
     * @return
     * @throws DtoNullException
     */
    DataResult<List<ContestApplyRecordVo>> queryContestApplyRecordById(String relation, Integer stageCurrent) throws DtoNullException;

    /**
     * 根据审核人查询竞赛申请记录
     *
     * @return
     */
    DataResult<List<ContestApplyRecordVo>> queryContestApplyRecordByAuditPerson(ContestApplyRecordQuery contestApplyRecordQuery) throws DtoNullException;

    /**
     * ID查询已审核
     *
     * @param recordId
     * @return
     */
    DataResult<Map<String, Object>> queryContestApplyRecordById(Long recordId) throws DtoNullException;

}
